<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns="http://www.w3.org/1999/xhtml"
		xmlns:res="http://www.w3.org/2005/sparql-results#"
		exclude-result-prefixes="res xsl">
  <xsl:output method="text"/>


<xsl:template name="header">

		<xsl:text>Header</xsl:text>
      <xsl:for-each select="res:head/res:link"> 
	<xsl:text>Link to <xsl:value-of select="@href"/></xsl:text>
      </xsl:for-each>

  </xsl:template>

  <xsl:template name="boolean-result">
    <xsl:text>ASK => <xsl:value-of select="res:boolean"/></xsl:text>
  </xsl:template>


  <xsl:template name="vb-result">

<xsl:choose>
	<xsl:when test="res:results/res:result">
  		<xsl:for-each select="res:head/res:variable">
	   		<xsl:text><xsl:value-of select="@name"/>       </xsl:text>
	  	</xsl:for-each>
<xsl:text>
</xsl:text>

		<xsl:for-each select="res:results/res:result">
			<xsl:apply-templates select="."/>
		</xsl:for-each>
	</xsl:when>
	<xsl:otherwise>
		<xsl:text>Zero results</xsl:text>
	</xsl:otherwise>
</xsl:choose>

	
  </xsl:template>

  <xsl:template match="res:result">
    <xsl:variable name="current" select="."/>
    <xsl:for-each select="//res:head/res:variable">
      <xsl:variable name="name" select="@name"/>
   
	<xsl:choose>
	  <xsl:when test="$current/res:binding[@name=$name]">

	    <!-- apply template for the correct value type (bnode, uri, literal) -->
	    <xsl:apply-templates select="$current/res:binding[@name=$name]"/>
<xsl:text>
</xsl:text>
	  </xsl:when>
	  <xsl:otherwise>
	    <!-- no binding available for this variable in this solution -->
	  </xsl:otherwise>
	</xsl:choose>

    </xsl:for-each>

  </xsl:template>

  <xsl:template match="res:bnode">
    <xsl:text>_:</xsl:text>
    <xsl:value-of select="text()"/>
  </xsl:template>

  <xsl:template match="res:uri">
    <xsl:variable name="uri" select="text()"/>

    <xsl:text>&lt;</xsl:text>
    <xsl:value-of select="$uri"/>
    <xsl:text>&gt;</xsl:text>
  </xsl:template>

  <xsl:template match="res:literal">
    <xsl:text>"</xsl:text>
    <xsl:value-of select="text()"/>
    <xsl:text>"</xsl:text>

    <xsl:choose>
      <xsl:when test="@datatype">
	<!-- datatyped literal value -->
	^^&lt;<xsl:value-of select="@datatype"/>&gt;
      </xsl:when>
      <xsl:when test="@xml:lang">
	<!-- lang-string -->
	@<xsl:value-of select="@xml:lang"/>

      </xsl:when>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="res:sparql">

	<xsl:if test="res:head/res:link">
	  <xsl:call-template name="header"/>

	</xsl:if>

	<xsl:choose>
	  <xsl:when test="res:boolean">
	    <xsl:call-template name="boolean-result" />
	  </xsl:when>

	  <xsl:when test="res:results">
	    <xsl:call-template name="vb-result" />
	  </xsl:when>

	</xsl:choose>


  </xsl:template>
<xsl:template match="text()"/>

</xsl:stylesheet>
